/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package sv.com.intesal.rrhh.controlador;

import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import sv.com.intesal.clases.abstracts.ControladorAbstract;
import sv.com.intesal.rrhh.bean.Empleado;
import sv.com.intesal.rrhh.sql.SQLEmpleado;

/**
 *
 * @author ejerez
 */
public class EmpleadoControlador extends ControladorAbstract {

    public void insert(Empleado e) throws Exception {
        try {
            super.setPreparedStatement(SQLEmpleado.insert);

            super.ps.setInt(1, e.getCodigo_c());
            super.ps.setString(2, e.getNombre_e());
            super.ps.setString(3, e.getApellido_e());
            super.ps.setString(4, e.getDireccion_e());
            super.ps.setString(5, e.getDui_e());
            super.ps.setString(6, e.getNit_e());
            super.ps.setString(7, e.getTelefono_e());
            super.ps.setString(8, e.getCelular_e());
            super.ps.setString(9, e.getIdentificador_e());
            super.ps.setString(10, v.getEstado(e.getEstado_filtro_e()));
            super.ps.setDate(11, v.getFecha(e.getFecha_nacimiento_e()));

            super.ps.executeUpdate();
        } catch (Exception ex) {
            throw new Exception(ex);
        } finally {
            super.setCloseConexion();
        }
    }

    public void update(Empleado e) throws Exception {
        try {
            super.setPreparedStatement(SQLEmpleado.update);

            super.ps.setInt(1, e.getCodigo_c());
            super.ps.setString(2, e.getNombre_e());
            super.ps.setString(3, e.getApellido_e());
            super.ps.setString(4, e.getDireccion_e());
            super.ps.setString(5, e.getDui_e());
            super.ps.setString(6, e.getNit_e());
            super.ps.setString(7, e.getTelefono_e());
            super.ps.setString(8, e.getCelular_e());
            super.ps.setString(9, e.getIdentificador_e());
            super.ps.setString(10, v.getEstado(e.getEstado_filtro_e()));
            super.ps.setDate(11, v.getFecha(e.getFecha_nacimiento_e()));
            super.ps.setInt(12, e.getCodigo_e());

            super.ps.executeUpdate();
        } catch (Exception ex) {
            throw new Exception(ex);
        } finally {
            super.setCloseConexion();
        }
    }

    public List<Empleado> getEmpleados() throws Exception {
        List<Empleado> lista = new ArrayList<Empleado>();
        try {
            super.getExecuteQuery(SQLEmpleado.getEmpleados);

            while (super.rs.next()) {
                lista.add(this.getEmpleado(super.rs));
            }
            return lista;
        } catch (Exception ex) {
            throw new Exception(ex);

        } finally {
            super.setCloseConexion();
        }
    }

    public List<Empleado> getEmpleadoActivos() throws Exception {
        List<Empleado> lista = new ArrayList<Empleado>();
        try {
            super.getExecuteQuery(SQLEmpleado.getEmpleadoActivos);

            while (super.rs.next()) {
                lista.add(this.getEmpleado(super.rs));
            }

            return lista;
        } catch (Exception ex) {
            throw new Exception(ex);
        } finally {
            super.setCloseConexion();
        }
    }

    public Empleado getEmpleado(Integer codigo_e) throws Exception {
        List<Empleado> lista = new ArrayList<Empleado>();
        try {
            super.setPreparedStatement(SQLEmpleado.getEmpleado);
            super.ps.setInt(1, codigo_e);
            super.rs = ps.executeQuery();
            while (super.rs.next()) {
                return this.getEmpleado(super.rs);
            }

            return null;
        } catch (Exception ex) {
            throw new Exception(ex);
        } finally {
            super.setCloseConexion();
        }
    }

    private Empleado getEmpleado(ResultSet rs) throws Exception {
        try {
            Empleado e = new Empleado();
            e.setCodigo_e(rs.getInt("codigo_e"));
            e.setNombre_e(rs.getString("nombre_e"));
            e.setApellido_e(rs.getString("apellido_e"));
            e.setNombre_completo_e(rs.getString("nombre_e") + " " + rs.getString("apellido_e"));
            e.setDireccion_e(rs.getString("direccion_e"));
            e.setDui_e(rs.getString("dui_e"));
            e.setNit_e(rs.getString("nit_e"));
            e.setTelefono_e(rs.getString("telefono_e"));
            e.setCelular_e(rs.getString("celular_e"));
            e.setIdentificador_e(rs.getString("identificador_e"));
            e.setEstado_e(rs.getString("estado_e"));
            e.setEstado_filtro_e(v.getEstado(rs.getString("estado_e")));
            e.setFecha_nacimiento_e(rs.getDate("fecha_nacimiento_e"));

            e.setCodigo_a(rs.getInt("codigo_a"));
            e.setNombre_a(rs.getString("nombre_a"));

            e.setCodigo_c(rs.getInt("codigo_c"));
            e.setNombre_c(rs.getString("nombre_c"));
            return e;
        } catch (Exception ex) {
            throw new Exception(ex);
        }
    }
}
